// taskmanager.h
#ifndef TASKMANAGER_H
#define TASKMANAGER_H

#include <QObject>
#include <QQueue>
#include <QMutex>

#include <Common/hardware_task_queue.h>


class TaskManager : public QObject
{
    Q_OBJECT

public:
    static TaskManager& instance();

    // 不需要 setDatabaseManager 方法了

    // 任务队列管理
    void addPendingTask(const HardwareTaskQueue& task);
    void addPendingTasks(const QList<HardwareTaskQueue>& tasks);
    bool hasPendingTasks() const;
    int pendingTaskCount() const;

    // 当前任务管理
    HardwareTaskQueue getCurrentTask() const;
    bool isTaskExecuting() const;
    void clearPendingTasks();

    // 任务状态更新（由外部服务调用）
    bool completeTaskStatus(TaskType taskType, bool success,const QString& message = "");

signals:
    // 状态更新信号（用于界面显示）
    void taskStarted(const HardwareTaskQueue& task);
    void taskFinished(qint64 taskId, bool success, const QString& message);


    // 日志信号
    void logMessage(const QString& message);

private slots:
    void startNextTask();

private:
    explicit TaskManager(QObject* parent = nullptr);

    void log(const QString& message);

    // 数据库操作
    bool updateStatus(TaskStatus status, const QString& resultMessage = "");


private:
    mutable QMutex m_mutex;
    QQueue<HardwareTaskQueue> m_pendingTasks;    // 待执行任务队列
    HardwareTaskQueue m_currentTask;             // 当前执行的任务
    bool m_isExecuting;                          // 是否正在执行任务
    // 不需要 m_databaseManager 成员变量
};

#endif // TASKMANAGER_H
